package exo3;

import java.awt.*;                    // Pour Graphics, Frame
import java.awt.event.WindowAdapter;  // Pour fermer
import java.awt.event.WindowEvent;    // Pour fermer

/**
 * Dessin de Ek
 */
public abstract class Ek extends Frame
{
    static final int WIDTH = 800;       // taille initiale de la frame
    static final int HEIGHT = 1200;
    protected int profondeur;

    /**
     * Creation de Ek.
     * @param prof nombre d'it�rations
     */
    public Ek (int prof)
    {
        this.setSize(WIDTH, HEIGHT);
        this.setVisible(true);
        this.setBackground(Color.black);
        this.profondeur = prof;
        addWindowListener(new WindowHandler());  // pour fermer
        setTitle("Exo3");
    }

    private class WindowHandler extends WindowAdapter
    {
        public void windowClosing (WindowEvent e)
        {
            System.exit(0);
        }
    }

    public void paint (Graphics g)
    {
        int frameHeight = getSize().height; // taille du frame, cette fois avec
                                            // lesbvordures
        int frameWidth = getSize().width;
        int h = frameHeight - 50;  // pour que Ck tienne dans
        int w = frameWidth - 50;  // le frame
        int rootX = frameWidth / 2; // recherche du centre
        int rootY = frameHeight / 2;   //
        g.setColor(Color.yellow);  // La couleur avec laquelle on va dessiner

        drawEk(w / 2, h / 2, 150.0, 0.0, profondeur, g);
    }

    /**
     * Fonction drawEk : Dessine Ek de manière récursive
     * @param x      Abscisse du point de l'extrémité
     * @param y      Ordonnée du point de l'extrémité
     * @param l      Longueur des branches
     * @param offset Angle de décalage éventuel des branches
     * @param k      Profondeur de récurrence
     * @param g      Zone graphique
     */
    public abstract void drawEk (int x, int y, double l, double offset, int k,
                                 Graphics g);
}
